package hehe.router;

import hehe.router.util.RouteHelper;

import java.util.List;
import java.util.Map;

/**
 * url 对应控制器
 *<B>说明：</B>
 *<pre>
 * 略
 *</pre>
 *<B>示例：</B>
 *<pre>
 *  略
 *</pre>
 *<B>日志：</B>
 *<pre>
 *  略
 *</pre>
 *<B>注意事项：</B>
 *<pre>
 *  略
 *</pre>
 */
public class Controller
{
    /**
     * pathinfo 分隔符
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    private static final String PATH_INFO_SPLIT = "/";

    /**
     * 控制器名称
     *<B>说明：</B>
     *<pre>
     *　基本格式:app.controller.indexController
     *</pre>
     */
    protected String controller;

    /**
     * 控制器action名称
     *<B>说明：</B>
     *<pre>
     *　控制器方法名称
     *  基本格式:add
     *</pre>
     */
    protected String action;

    /**
     * 从pathinfo 路径分离获得的参数
     *<B>说明：</B>
     *<pre>
     *　此参数一般会注入到GET
     *</pre>
     */
    protected Map<String,String> params;

    public Controller()
    {

    }

    public Controller(String controllerName,String actionName,Map<String,String> params)
    {
        this.controller = controllerName;
        this.action = actionName;
        this.params = params;
    }

    /**
     * 创建控制器对象
     *<B>说明：</B>
     *<pre>
     *  从pathinfo　分离出controller名称,action 名称
     *</pre>
     * @param pathinfo url pathinfo 部分,基本格式:user/add
     * @param params url 参数
     */
    public Controller(String pathinfo,Map<String,String> params)
    {
        String[] pathinfos = pathinfo.split(PATH_INFO_SPLIT);
        List<String> paths =  RouteHelper.arrayToLinkedList(pathinfos);

        // 读取控制器名
        if (paths.size() > 0 && paths.get(0) != null) {
            this.controller = paths.get(0);
            paths.remove(0);
        }

        // 读取控制器方法
        if (paths.size() > 0 && paths.get(0) != null) {
            this.action =  paths.get(0);
            paths.remove(0);
        }

        this.params = params;
    }

    /**
     * 获取action 名称
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public String getAction()
    {
        return this.action;
    }

    /**
     * 设置action 名称
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public void setAction(String action)
    {
        this.action = action;
    }

    /**
     * 获取controller 名称
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public String getController()
    {
        return this.controller;
    }

    /**
     * 设置controller 名称
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public void setController(String controller)
    {
        this.controller = controller;
    }

    public Map<String,String> getParams()
    {
        return this.params;
    }

}
